package com.test.util;

/**
 * 类工具类，提供类加载和类存在性检查等功能
 */
public class ClassUtils {

    /**
     * 获取默认的类加载器
     *
     * @return 默认的类加载器，可能为线程上下文类加载器、ClassUtils类的类加载器或系统类加载器
     */
    public static ClassLoader getDefaultClassLoader() {
        ClassLoader cl = null;
        try {
            //首先，尝试获取当前现成的上下文类加载器
            cl = Thread.currentThread().getContextClassLoader();
        }
        catch (Throwable ex) {
            // 无法获取线程上下文类加载器时忽略
        }
        if (cl == null) {
            // 其次，使用ClassUtils类的类加载器
            cl = ClassUtils.class.getClassLoader();
            if (cl == null) {
                // 最后，使用系统类加载器
                try {
                    cl = ClassLoader.getSystemClassLoader();
                }
                catch (Throwable ex) {
                    // 无法获取系统类加载器时忽略
                }
            }
        }
        return cl;
    }

    /**
     * 判断给定的类是否存在
     *
     * @param className 类名，用于检查是否存在
     * @param classLoader 类加载器，用于加载类
     * @return 如果类存在返回true，否则返回false
     */
    public static boolean isPresent(String className, ClassLoader classLoader) {
        try {
            Class.forName(className,false, classLoader);
            return true;
        }
        catch (Throwable ex) {
            return false;
        }
    }
}
